package com.zhentao.util;

import org.springframework.stereotype.Component;
import java.util.List;

@Component
public class SqlPromptGenerator {
    // 表结构描述模板
    private static final String TABLE_SCHEMA_TEMPLATE = "已知数据库中有以下表结构：\n%s\n";
    
    // 指令模板
    private static final String INSTRUCTION_TEMPLATE = "请将以下自然语言转换为MySQL SQL语句，仅返回SQL本身，不要包含任何解释或额外内容。" +
                                                     "确保SQL语法正确，表名和字段名必须与提供的表结构一致。\n%s";

    /**
     * 生成包含多表结构的提示词
     */
    public String generatePromptWithSchemas(List<String> tableSchemas, String naturalLanguage) {
        if (tableSchemas == null || tableSchemas.isEmpty()) {
            throw new IllegalArgumentException("表结构列表不能为空");
        }
        if (naturalLanguage == null || naturalLanguage.trim().isEmpty()) {
            throw new IllegalArgumentException("自然语言查询不能为空");
        }
        
        String schemaStr = String.join("\n", tableSchemas);
        String schemaPart = String.format(TABLE_SCHEMA_TEMPLATE, schemaStr);
        String instructionPart = String.format(INSTRUCTION_TEMPLATE, naturalLanguage);
        
        return schemaPart + instructionPart;
    }

    /**
     * 生成包含单个表结构的提示词
     */
    public String generatePromptWithSingleSchema(String singleTableSchema, String naturalLanguage) {
        return generatePromptWithSchemas(List.of(singleTableSchema), naturalLanguage);
    }
}
